package org.inspiration.dudu.content.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.inspiration.dudu.content.model.entity.QuestionEntity;
import org.inspiration.dudu.content.model.vo.QuestionVO;

import java.util.List;

/**
 * QuestionMapper 接口用于操作问题相关的数据库表。
 */
@Mapper
public interface QuestionMapper extends BaseMapper<QuestionEntity> {

    /**
     * 创建一个新的问题记录。
     *
     * @param questionEntity 问题实体对象
     */
    @Insert("INSERT INTO question (id, title, content_file_path, user_id) " +
            "VALUES (#{id}, #{title}, #{contentFilePath}, #{userId})")
    void createQuestion(QuestionEntity questionEntity);

    /**
     * 增加问题的点赞数。
     *
     * @param contentId 问题的内容ID
     */
    @Update("UPDATE question set like_count = like_count + 1 where id = #{contentId}")
    void increaseLikeCount(String contentId);

    /**
     * 减少问题的点赞数。
     *
     * @param contentId 问题的内容ID
     */
    @Update("UPDATE question set like_count = like_count - 1 where id = #{contentId}")
    void decreaseLikeCount(String contentId);

    /**
     * 根据内容ID获取用户ID。
     *
     * @param contentId 问题的内容ID
     * @return 用户ID
     */
    @Select("select user_id from question where id = #{contentId}")
    Long getUserIdByContentId(String contentId);

    /**
     * 增加问题的收藏数。
     *
     * @param contentId 问题的内容ID
     */
    @Update("update question set favorite_count = favorite_count + 1 where id = #{contentId}")
    void increaseFavoriteCount(String contentId);

    /**
     * 减少问题的收藏数。
     *
     * @param contentId 问题的内容ID
     */
    @Update("update question set favorite_count = favorite_count - 1 where id = #{contentId}")
    void decreaseFavoriteCount(String contentId);

    /**
     * 根据ID获取问题实体。
     *
     * @param id 问题的ID
     * @return 问题实体对象
     */
    @Select("select * from question where id = #{id}")
    QuestionEntity getQuestionById(String id);

    /**
     * 增加问题的评论数。
     *
     * @param contentId 问题的内容ID
     */
    @Update("update question set comment_count = comment_count + 1 where id = #{contentId}")
    void increaseCommentCount(String contentId);

    /**
     * 增加问题的回答数。
     *
     * @param contentId 问题的内容ID
     */
    @Update("update question set answer_count = answer_count + 1 where id = #{contentId}")
    void increaseAnswerCount(String contentId);

    /**
     * 根据ID更新问题的点赞数。
     *
     * @param id        问题的ID
     * @param likeCount 新的点赞数
     */
    @Update("update question set like_count = #{likeCount} where id = #{id}")
    void updateLikeCountById(String id, Long likeCount);

    /**
     * 根据ID更新问题的收藏数。
     *
     * @param id            问题的ID
     * @param favoriteCount 新的收藏数
     */
    @Update("update question set favorite_count = #{favoriteCount} where id = #{id}")
    void updateFavoriteCountById(String id, Long favoriteCount);

    /**
     * 根据ID更新问题的评论数。
     *
     * @param id            问题的ID
     * @param commentCount  新的评论数
     */
    @Update("update question set comment_count = #{commentCount} where id = #{id}")
    void updateCommentCountById(String id, Long commentCount);

    /**
     * 根据ID更新问题的回答数。
     *
     * @param id            问题的ID
     * @param answerCount   新的回答数
     */
    @Update("update question set answer_count = #{answerCount} where id = #{id}")
    void updateAnswerCountById(String id, Long answerCount);

    @Select("select * from question order by created_at desc limit #{offset}, #{pageSize}")
    List<QuestionEntity> getQuestionsByDESC(Integer offset, Integer pageSize);

    @Select("select * from question where user_id = #{userId} order by created_at desc limit #{offset}, #{pageSize}")
    List<QuestionEntity> getQuestionsByUserIdOrderByDESC(Long userId, Integer offset, Integer pageSize);
}
